
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>

#include <sys/signal.h>
#include <unistd.h>
#include <errno.h>

void signal_function(int sig_no);

void test_function_one();

// build : gcc -g signal_test.c -o signal_test
int main(int argc, char * argv[]) {

    signal(SIGINT, signal_function);

    sigset_t set;
    sigemptyset(&set); 
    sigaddset(&set, SIGINT);

    test_function_one();

    // int index = 0;
    // for (; index < 3; index++) {

    //     sigprocmask(SIG_BLOCK, &set, NULL);
    //     // send signal to this proccess
    //     for (int i = 0; i < 10; i++) {

    //         printf("sigint has block set\n");
    //         sleep(1);
    //     }
    //     sigprocmask(SIG_UNBLOCK, &set, NULL);

    //     sleep(5);
    // }
    return EXIT_SUCCESS;
}

void test_function_one() {

    sigset_t set;
    sigemptyset(&set);

    sigaddset(&set, SIGINT);
    sigaddset(&set, SIGTERM);
    sigaddset(&set, SIGIO);

    int result = sigismember(&set, SIGINT);
    if (result) {

        printf("set including SIGINT\n");
    }
    else {

        printf("call sigismember failure.\n");
    }
    sigset_t zero_set;
    sigemptyset(&zero_set);
}

void signal_function(int sig_no) {

    printf("recevice signal : %d", sig_no);
}
